#include "table.h"
#include <iostream>

using namespace std;

std::valarray<std::valarray<double> > table (std::valarray<double> w, input& data) {
    unsigned n = data.n;

    unsigned num_upr = data.num_upr;
    std::valarray<double> c(num_upr);
    c = data.c;
    std::vector<double> T;        //хранит моменты переключения для каждого управления в виде: "моменты переключения tf" для каждого управления

    for (unsigned i=0; i<data.sum_c; i++) T.push_back(w[n+i]);    //моменты переключения

    std::valarray<double> sum(num_upr);
    sum[0]=c[0];
    for (unsigned i=1; i<num_upr; i++) {
        sum[i] = c[i]+sum[i-1];
    }

    std::vector<double>::iterator it;
    for (unsigned i=0; i<num_upr; i++) {
        it = T.begin();
        T.insert(it+sum[i]+i,data.tf);
    }

    std::valarray<std::valarray<double> > tau;
    tau.resize(num_upr);                                      //tau --- двумерный вектор векторов: по строкам -- номера управлений, по столбцам -- время
    for (unsigned i=0; i<num_upr; i++) tau[i].resize(c[i]+2); //tau хранит моменты переключения в виде: "t0 моменты переключения tf" для каждого управления (по строкам)
    for (unsigned i=0; i<num_upr; i++) tau[i][0]=data.t;


    std::valarray<double> s(num_upr);
    s[0]=0;
    for (unsigned i=1; i<num_upr; i++) {
        s[i] = s[i-1]+(c[i-1]+1);
    }

    for (unsigned i=0; i<num_upr; i++) {
        for (unsigned j=1; j<tau[i].size(); j++) {
            tau[i][j]=T[j-1+s[i]];
        }
    }

/*
    for (unsigned i=0; i<num_upr; i++) {
        for (unsigned j=0; j<tau[i].size(); j++) {
            std::cout << "tau= " << tau[i][j] << " ";
        }
        std::cout << std::endl;
    }
*/

    return tau;
}